package main

import "fmt"

func main() {
	// T(v) T代表数据类型 v代表要转换的变量
	var i int32 = 127
	var n1 float32 = float32(i)
	var n2 int16 = int16(i)
	var n3 int64 = int64(i)
	fmt.Printf("%+v, n2=%v , n3=%v\n", n1, n2, n3)

	//被转换的变量本身数据类型没有变化
	fmt.Printf("i的数据类型为%T , n2的数据类型为%T\n", i, n2)

	//如果由int64 转为 int8{-128 ~ 2^7-1} 精度可能会丢失
	var a1 int64 = 363
	var a2 int8 = int8(a1)
	fmt.Printf("a2=%v\n", a2)

	//转换例题
	//var b1 int8 = 12
	//var b2 int16
	//var b3 int32
	//b2 = b1 + 20  //[编译不通过 b1(int8)不能赋给b2(int16)] b2 = int16(b1) + 20
	//b3 = b1 + 20  //[编译不通过 b1(int8)不能赋给b3(int32)] b3 = int32(b1) + 20

	//var c1 int32 = 12
	//var c2 int8
	//var c3 int8
	//c2 = int8(c1) + 127 //编译通过 但是结果不是127 + 12 按照溢出处理
	//c3 = int8(c1) + 128 //编译不通过 , 因为128超出了int8
}
